package com.byq.mm.abstractx.cluster.provider;

import com.byq.mm.abstractx.cluster.client.ClusterClient;
import com.byq.mm.abstractx.cluster.server.ClusterServer;
import com.byq.mm.abstractx.cluster.server.executor.Executor;

public interface ClusterProvider {
	static public class Define{
		public static class ClientCommand {
			public static class ReadAttribute{
				static public final String COMMAND_NAME = "read_attribute";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
			public static class WriteAttribute{
				static public final String COMMAND_NAME = "write_attribute";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
			public static class Subscribe{
				static public final String COMMAND_NAME = "subscribe";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
			public static class Unsubscribe{
				static public final String COMMAND_NAME = "unsubscribe";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
			public static class ReadSubscribe{
				static public final String COMMAND_NAME = "read_subscribe";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
		}
		public static class ServerCommand {
			public static class ReportAttribute{
				static public final String COMMAND_NAME = "report_attribute";
				public static class Parameters{
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
			public static class ReportSubscribe{
				static public final String COMMAND_NAME = "report_subscribe";
				public static class Parameters{
					static public final String SUBSCRIBED = "subscribed";
					static public final String ATTRIBUTE_NAME = "attributeName";
				}
			}
		}
	}
	String getClusterIdentifier();
	Class<? extends ClusterClient> getCusterClientType();
	Class<? extends ClusterServer> getCusterServerType();
	Class<? extends Executor> getExecutorType();
}
